﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using SOAPServicioTecnico_Final.Persistencia;
using SOAPServicioTecnico_Final.Dominio;

namespace SOAPServicioTecnico_Final
{
    public class VehiculoService : IVehiculo
    {
        private VehiculoDAO vehiculoDAO = null;
        private VehiculoDAO VehiculoDAO
        {
            get
            {
                if (vehiculoDAO == null)
                    vehiculoDAO = new VehiculoDAO();
                return vehiculoDAO;
            }
        }

        private UsuarioDAO usuarioDAO = null;
        private UsuarioDAO UsuarioDAO
        {
            get
            {
                if (usuarioDAO == null)
                    usuarioDAO = new UsuarioDAO();
                return usuarioDAO;
            }
        }
        public Vehiculo RegistrarVehiculo(  DateTime Fecha_registro,
                                            string Clase,
                                            string Marca,
                                            string Modelo,
                                            int anio_vehiculo,
                                            string Color,
                                            string Placa,
                                            string nro_serie,
                                            string nro_motor,
                                            int nro_ejes,
                                            int nro_puertas,
                                            string combustible,
                                            string nro_ruedas,
                                            string NombreUsu)
        {              
              try {
                  Usuario a = UsuarioDAO.ObteneridxNombre(NombreUsu);
                  Vehiculo vehiculocreado = null;
                  if (a == null)
                  {
                  }else{
                  vehiculocreado = new Vehiculo() 
                  {
                   //vehiculo.Id_vehiculo = 
                  Fecha_registro = Fecha_registro,
                  Clase = Clase,
                  Marca = Marca,
                  Modelo = Modelo,
                  anio_vehiculo = anio_vehiculo,
                  Color = Color,
                  Placa = Placa,
                  nro_serie = nro_serie,
                  nro_motor = nro_motor,
                  nro_ejes = nro_ejes,
                  nro_puertas = nro_puertas,
                  combustible = combustible,
                  nro_ruedas = nro_ruedas,
                  NombreUsu = a.NombreUSU               
                  };
                  }
                 return vehiculocreado;
              }
              catch (Exception e)
              {
                  throw new FaultException<ValidationException>
                  (new ValidationException { 
                   ValidationError = "Error - no se pudo registrar su vehiculo" 
                  },
                  new FaultReason("Validation Failed"));
              }
        }
        /*public Vehiculo listaVehiculos(int Id_vehiculo)
       {
           try
           {
               return VehiculoDAO.Obtener(Id_vehiculo);
           }
           catch (Exception e)
           {              
               throw;
           }          
            
       }*/
      //  public List<Vehiculo> listaVehiculos()
       // {
        //    return VehiculoDAO.ListarTodos().ToList();
        //}
        public Usuario Obtener(string NombreUsu)
        {
            return UsuarioDAO.ObteneridxNombre(NombreUsu);
        }

        public Vehiculo ModificarVehiculo(  DateTime Fecha_registro,
                                            string Clase,
                                            string Marca,
                                            string Modelo,
                                            int anio_vehiculo,
                                            string Color,
                                            string Placa,
                                            string nro_serie,
                                            string nro_motor,
                                            int nro_ejes,
                                            int nro_puertas,
                                            string combustible,
                                            string nro_ruedas,
                                            string NombreUsu
                                            )
        {
            Vehiculo vehiculoAmodificar = new Vehiculo()
            {
                Fecha_registro = Fecha_registro,
                Clase = Clase,
                Marca = Marca,
                Modelo = Modelo, 
                anio_vehiculo = anio_vehiculo,
                Color = Color,
                Placa = Placa,
                nro_serie = nro_serie,
                nro_motor = nro_motor,
                nro_ejes = nro_ejes,
                nro_puertas = nro_puertas,
                combustible = combustible,
                nro_ruedas = nro_ruedas,
                NombreUsu = NombreUsu,
            };

            return VehiculoDAO.Modificar(vehiculoAmodificar);
        }
        public void EliminaVehiculo(int Id_vehiculo)
        {
            try
            {
                    Vehiculo usuarioExistente = new Vehiculo();
                    usuarioExistente = VehiculoDAO.Obtener(Id_vehiculo);
                    VehiculoDAO.Eliminar(usuarioExistente);
            }
            catch (Exception e)
            {     
            throw new FaultException<ValidationException>(new ValidationException { ValidationError = "“Error, el usuario tiene un alquiler en curso" },
            new FaultReason("Validation Failed"));
            }

        }
    }   
}
